home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 1 / ETO Development Tools 1.iso / Essentials / Developer Essentials Jul 90 / Programming / MPW Interfaces & Libraries 3.1 / CIncludes / SANE.h < prev    next >
Encoding:
C/C++ Source or Header  |  1989-10-13  |  5.7 KB  |  233 lines  |  [TEXT/MPS ]

  1. /************************************************************
  2.  
  3. Created: Wednesday, September 27, 1989 at 2:58 PM
  4.     SANE.h
  5.     C Interface to the Macintosh Libraries
  6.  
  7.  
  8.     Copyright Apple Computer, Inc.    1985-1989
  9.     All rights reserved
  10.  
  11. ************************************************************/
  12.  
  13.  
  14. #ifndef __SANE__
  15. #define __SANE__
  16.  
  17.  
  18. #ifdef mc68881
  19.  
  20. /* specific to the MC68881 SANE library */
  21.  
  22. #define INEXACT ((exception)(8))
  23. #define DIVBYZERO ((exception)(16))
  24. #define UNDERFLOW ((exception)(32))
  25. #define OVERFLOW ((exception)(64))
  26. #define INVALID ((exception)(128))
  27. #define CURINEX1 ((exception)(256))
  28. #define CURINEX2 ((exception)(512))
  29. #define CURDIVBYZERO ((exception)(1024))
  30. #define CURUNDERFLOW ((exception)(2048))
  31. #define CUROVERFLOW ((exception)(4096))
  32. #define CUROPERROR ((exception)(8192))
  33. #define CURSIGNAN ((exception)(16384))
  34. #define CURBSONUNOR ((exception)(32768))
  35.  
  36. #else
  37.  
  38. /* specific to the software SANE library */
  39.  
  40. #define INVALID ((exception)(1))
  41. #define UNDERFLOW ((exception)(2))
  42. #define OVERFLOW ((exception)(4))
  43. #define DIVBYZERO ((exception)(8))
  44. #define INEXACT ((exception)(16))
  45. #define IEEEDEFAULTENV ((environment)(0))    /*IEEE-default floating-point environment*/
  46.  
  47. #endif                                        /* mc68881 */
  48.  
  49. /* The common interface to the SANE library */
  50.  
  51. /* Decimal Representation Constants */
  52.  
  53. #define SIGDIGLEN 20                        /* significant decimal digits */
  54. #define DECSTROUTLEN 80                     /* max length for dec2str output */
  55.  
  56. /* Decimal Formatting Styles */
  57.  
  58. #define FLOATDECIMAL ((char)(0))
  59. #define FIXEDDECIMAL ((char)(1))
  60.  
  61. /* Ordering Relations */
  62.  
  63. #define GREATERTHAN ((relop)(0))
  64. #define LESSTHAN ((relop)(1))
  65. #define EQUALTO ((relop)(2))
  66. #define UNORDERED ((relop)(3))
  67.  
  68. /* Inquiry Classes */
  69.  
  70. #define SNAN ((numclass)(0))
  71. #define QNAN ((numclass)(1))
  72. #define INFINITE ((numclass)(2))
  73. #define ZERONUM ((numclass)(3))
  74. #define NORMALNUM ((numclass)(4))
  75. #define DENORMALNUM ((numclass)(5))
  76.  
  77. /* Rounding Directions */
  78.  
  79. #define TONEAREST ((rounddir)(0))
  80. #define UPWARD ((rounddir)(1))
  81. #define DOWNWARD ((rounddir)(2))
  82. #define TOWARDZERO ((rounddir)(3))
  83.  
  84. /* Rounding Precisions */
  85.  
  86. #define EXTPRECISION ((roundpre)(0))
  87. #define DBLPRECISION ((roundpre)(1))
  88. #define FLOATPRECISION ((roundpre)(2))
  89.  
  90. #ifdef mc68881
  91.  
  92. typedef long exception;
  93.  
  94.  
  95. struct extended80 {
  96.     short w[5];
  97. };
  98.  
  99. typedef struct extended80 extended80;
  100. struct environment {
  101.     long FPCR;
  102.     long FPSR;
  103. };
  104.  
  105. typedef struct environment environment;
  106. environment IEEEDEFAULTENV = {0L,0L};        /* IEEE-default floating-point environment */
  107.  
  108. struct trapvector {
  109.     void (*unordered)();
  110.     void (*inexact)();
  111.     void (*divbyzero)();
  112.     void (*underflow)();
  113.     void (*operror)();
  114.     void (*overflow)();
  115.     void (*signan)();
  116. };
  117.  
  118. typedef struct trapvector trapvector;
  119. #else
  120.  
  121. typedef short exception;
  122. typedef short environment;
  123. typedef struct {short w[6];} extended96;
  124.  
  125. struct mischaltinfo {
  126.     unsigned short haltexceptions;
  127.     unsigned short pendingCCR;
  128.     long pendingD0;
  129. };
  130.  
  131. typedef struct mischaltinfo mischaltinfo;
  132. typedef pascal void (*haltvector)(mischaltinfo *misc, void *src2, void *src, void *dst, short opcode);
  133. #endif
  134.  
  135. typedef short relop;                        /* relational operator */
  136. typedef short numclass;                     /* inquiry class */
  137. typedef short rounddir;                     /* rounding direction */
  138. typedef short roundpre;                     /* rounding precision */
  139.  
  140. struct decimal {
  141.     char sgn;                                /*sign 0 for +, 1 for -*/
  142.     char unused;
  143.     short exp;                                /*decimal exponent*/
  144.     struct{
  145.         unsigned char length;
  146.         unsigned char text[SIGDIGLEN];        /*significant digits */
  147.         unsigned char unused;
  148.         }sig;
  149. };
  150.  
  151. typedef struct decimal decimal;
  152. struct decform {
  153.     char style;                             /*FLOATDECIMAL or FIXEDDECIMAL*/
  154.     char unused;
  155.     short digits;
  156. };
  157.  
  158. typedef struct decform decform;
  159. #ifdef __cplusplus
  160. extern "C" {
  161. #endif
  162.  
  163. #ifdef mc68881
  164.  
  165. struct trapvector gettrapvector(void);
  166. void settrapvector(const trapvector *v);
  167. void x96tox80(const extended *x,extended80 *x80);
  168. void x80tox96(const extended80 *x80,extended *x);
  169.  
  170. #else
  171.  
  172. haltvector gethaltvector(void); 
  173. void sethaltvector(haltvector v);
  174. void x96tox80(const extended96 *x96,extended *x);
  175. void x80tox96(const extended *x,extended96 *x96);
  176.  
  177. #endif
  178.  
  179. void num2dec(const decform *f,extended x,decimal *d);
  180. extended dec2num(const decimal *d); 
  181. void dec2str(const decform *f,const decimal *d,char *s);
  182. void str2dec(const char *s,short *ix,decimal *d,short *vp); 
  183. extended remainder(extended x,extended y,short *quo);
  184. extended sqrt(extended x);
  185. extended rint(extended x);
  186. extended scalb(short n,extended x); 
  187. extended logb(extended x);
  188. extended copysign(extended x,extended y);
  189. extended nextfloat(extended x,extended y);
  190. extended nextdouble(extended x,extended y); 
  191. extended nextextended(extended x,extended y);
  192. extended log2(extended x);
  193. extended log(extended x);
  194. extended log1(extended x);
  195. extended exp2(extended x);
  196. extended exp(extended x);
  197. extended exp1(extended x);
  198. extended power(extended x,extended y);
  199. extended ipower(extended x,short i);
  200. extended compound(extended r,extended n);
  201. extended annuity(extended r,extended n);
  202. extended tan(extended x);
  203. extended sin(extended x);
  204. extended cos(extended x);
  205. extended atan(extended x);
  206. extended randomx(extended *x);
  207. numclass classfloat(extended x);
  208. numclass classdouble(extended x);
  209. numclass classcomp(extended x); 
  210. numclass classextended(extended x); 
  211. long signnum(extended x);
  212. void setexception(exception e,long s);
  213. long testexception(exception e);
  214. void sethalt(exception e,long s);
  215. long testhalt(exception e); 
  216. void setround(rounddir r);
  217. rounddir getround(void);
  218. void setprecision(roundpre p);
  219. roundpre getprecision(void);
  220. void setenvironment(environment e); 
  221. void getenvironment(environment *e);
  222. void procentry(environment *e); 
  223. void procexit(environment e);
  224. relop relation(extended x,extended y);
  225. extended nan(unsigned char c);
  226. extended inf(void); 
  227. extended pi(void);
  228. #ifdef __cplusplus
  229. }
  230. #endif
  231.  
  232. #endif
  233.